package com.cy.jt.system.web.controller;

import com.cy.jt.common.domain.JsonResult;
import com.cy.jt.system.domain.SysNotice;
import com.cy.jt.system.web.util.PageUtils;
import com.cy.jt.system.service.SysNoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/notice/")
public class SysNoticeController {
    @Autowired
    private SysNoticeService sysNoticeService;

    /**
     * 新增
     * @param notice
     * @return
     */
    @PostMapping
    public JsonResult doInsertNotice(@RequestBody SysNotice notice){
        sysNoticeService.insertNotice(notice);
        return new JsonResult("insert ok");
    }

    /**
     * 修改
     * @param notice
     * @return
     */
    @PutMapping
    public JsonResult doUpdateNotice(@RequestBody SysNotice notice){
        sysNoticeService.updateNotice(notice);
        return new JsonResult("update ok");
    }
    /**
     * 删除
     * @param id
     * @return
     */
    @DeleteMapping("{id}")
    public JsonResult doDeleteById(@PathVariable Long ...id){
        sysNoticeService.deleteById(id);
        return new JsonResult("delete ok");
    }
    /**
     * 查询
     */
    @GetMapping("{id}")
    public JsonResult doSelectById(@PathVariable Long id){
        return new JsonResult(sysNoticeService.selectById(id));
    }


    /**
     * 分页查询
     * 请求路径：http://localhost:8091/notice/?pageCurrent=2&pageSize=2
     * @param sysNotice
     * @return
     */
    /*
    报错信息：
        feign.FeignException$MethodNotAllowed: [405] during [GET] to [http://
        jt-system/notice/select] [RemoteNoticeService#doSelectNotice(SysNotice)
        ]: [{"timestamp":"2021-09-06T02:59:44.094+00:00","status":405,"error":
        "Method Not Allowed","message":"","path":"/notice/select"}]
    问题：OpenFeign新版本将get请求改为post请求
    解决办法：
    解决办法一：
    如下：把get请求改为post请求
     */
//    @PostMapping("select")
//    public JsonResult doSelectNotices(@RequestBody SysNotice sysNotice/*,Integer pageNum,Integer pageSize*/){
//        //未分页查询
//        //return new JsonResult(sysNoticeService.selectNotices(sysNotice));
//        //利用pageHelper进行分页查询
//        return new JsonResult(
//                //启动分页：底层会打开拦截器，然后执行查询
//                /*
//                    PageHelper.startPage(pageNum,pageSize)——>换成调用封装的工具类
//                    注意：多行注释：表示封装工具类时所删除的部分 --代码简化
//                 */
//                PageUtils.startPage() //启动分页拦截器
//                 //原始写法一：
////               .doSelectPageInfo(new ISelect() {/*执行查询业务*/
////                   @Override
////                   public void doSelect() {
////                       sysNoticeService.selectNotices(sysNotice);
////                   }
//                 //Lambda表达式写法二：
//                 .doSelectPageInfo(()-> { //执行查询业务
//                      sysNoticeService.selectNotices(sysNotice);
//                    }
//              ));
//    }
    /*
    解决办法二：
        如下：就用get请求，不用新版的OpenFeign
        操作如下：
        在依赖中添加如下依赖：
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
            <version>10.9</version>
        </dependency>
        在yml文件中添加如下配置：
        feign:
          httpclient:
            enabled: true
        然后如下所示：
     */
    @GetMapping
    public JsonResult doSelectNotices(/*@RequestBody*/ SysNotice sysNotice/*,Integer pageNum,Integer pageSize*/){
        //未分页查询
        //return new JsonResult(sysNoticeService.selectNotices(sysNotice));
        //利用pageHelper进行分页查询
        return new JsonResult(
                //启动分页：底层会打开拦截器，然后执行查询
                /*
                    PageHelper.startPage(pageNum,pageSize)——>换成调用封装的工具类
                    注意：多行注释：表示封装工具类时所删除的部分 --代码简化
                 */
                PageUtils.startPage() //启动分页拦截器
                        //原始写法一：
//               .doSelectPageInfo(new ISelect() {/*执行查询业务*/
//                   @Override
//                   public void doSelect() {
//                       sysNoticeService.selectNotices(sysNotice);
//                   }
                        //Lambda表达式写法二：
                        .doSelectPageInfo(()-> { //执行查询业务
                                    sysNoticeService.selectNotices(sysNotice);
                                }
                        ));
    }
}
